#include <stdlib.h>
#include <stdio.h>

int main ()
{
    //打开下面任意一个注释都会报read-only错误
    const char d = 'd';
    const char* p1 = &d;
    const char **a = &p1;
    //**a = '\0';//**a的值不允许改变
    *a = p1;
    a = a;
    
    char e = 'e';
    char* p2 = &e;
    char *const *b = &p2;
    **b = '\0';
    //*b = p2;//*b的值不允许改变
    b = b;

    char f = 'f';
    char* p3 = &f;
    char **const c = &p3;
    **c = '\0';
    *c = p3;
    //c = c;//c的值不允许改变

    return 0;
}
/*
在被调用函数中分配内存为什么参数一定是两层指针？http://learn.akae.cn/media/ch24s03.html 问题

第1种方法里函数Void creatDynArray(char ** inputPointer)里的形参inputPointer是个2级指针，就是指向指针的指针。当在主函数里用creatDynArray(&pCh)调用的时候，是把pCh这个指针的地址作为实参传给inputPointer的，inputPointer的值就是pCh的地址。当在creatDynArray中用*inputPointer = new char[10]（注意inputPointer前面有*）来分配内存时，实际上是把new分配的内存地址赋给inputPointer指向的变量，就是主函数中的pCh。所以在调用creatDynArray函数后，pCh会指向在creatDynArray函数中用new分配的内存。
第2种方法里函数Void creatDynArray(char * inputPointer)里的形参inputPointer是个1级指针。当在主函数里用creatDynArray(pCh)调用的时候，是把pCh这个指针的值作为实参传给inputPointer的，inputPointer的值等于pCh的值。显然inputPointer和pCh之间除了有相同的值外，并没有什么联系。当在creatDynArray中用inputPointer = new char[10]来分配内存时，只是把new分配的内存地址赋给inputPointer，pCh并不会得到赋值。所以在调用creatDynArray函数后，pCh的值并没有任何改变。
*/
